package com.jdk.demo.fileChannel.batchWrite;

import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

// write(ByteBuffer[])方法的作用是将每个缓冲区的remaining字节序列写入此通道的当前位置。
// write(ByteBuffer[])方法实现的是GatheringByteChannel接口中的同名方法。接口GatheringByteChannel的父接口是WritableByteChannel，说明接口GatheringByteChannel具有WritableByteChannel接口的以下两个特性
// 1、将1个ByteBuffer缓冲区中的remaining字节序列写入通道的当前位置中
// 2、write方法是同步的
// 此外，还具有第3个特性：将多个ByteBuffer缓冲区中的remaining剩余字节序列写入通道的当前位置中
public class Test3_1 {

	// 验证write方法是从通道的当前位置开始写入的；将ByteBuffer的remaining写入通道
	public static void main(String[] args) throws Exception {
		FileOutputStream fosRef = new FileOutputStream("c.txt");
		FileChannel fileChannel = fosRef.getChannel();
		fileChannel.write(ByteBuffer.wrap("123456".getBytes()));
		fileChannel.position(3);
		
		ByteBuffer buffer1 = ByteBuffer.wrap("abcde1".getBytes());
		ByteBuffer buffer2 = ByteBuffer.wrap("uvwxy2".getBytes());
		ByteBuffer[] bufferArray = new ByteBuffer[]{buffer1, buffer2};
		
		buffer1.position(1);
		buffer1.limit(3);
		buffer2.position(2);
		buffer2.limit(4);
		
		fileChannel.write(bufferArray);
		
		// 结果"123bcwx"
		fileChannel.close();
		fosRef.close();
	}
	
}
